// routes/users.js 使用的路由处理函数

// 导入 fs, path
const fs = require('fs')
const path = require('path')

// 导入数据库模型
const { PersonModel, UserModel } = require('../db/model')

// 用户注册
const register = async (req, res) => {
  // 获取请求信息
  const { username, password, nickname } = req.body
  // 判断用户名是否已占用
  const user = await PersonModel.findOne({ username })
  if (user) return res.send({ code: 0, message: '用户名已被占用, 请重新输入' })
  // 将用户信息插入数据库
  await PersonModel({ username, password, nickname }).save()
  res.send({
    code: 1,
    message: '注册成功'
  })
}

// 用户登录
const login = async (req, res) => {
  // 拿到用户名密码直接使用
  const { username, password } = req.body

  // 去访问数据库进行查询
  const result = await PersonModel.findOne({ username, password })

  // 判断, 如果 result 为 null 表示用户名密码错误
  if (!result) return res.send({ code: 0, message: '登录失败, 用户名密码错误' })

  // 代码来到这里, 说明该用户存在
  if (!result.is_status) return res.send({ code: 0, message: '登录失败, 该用户已经被禁用' })

  // 代码来到这里, 说明用户存储, 并且账号状态为启用
  // 需要提前向 session 内存储内容
  req.session.info = { id: result.id, username: result.username, nickname: result.nickname }
  res.send({ code: 1, message: '登录成功' })
}

// 修改用户信息
const update = async (req, res) => {
  // 拿到信息直接使用
  const { nickname, age, gender, desc, avatar } = req.body
  const { info } = req.session
  if (!info) return res.send({ code: 0, message: '用户未登录' })
  if (avatar) {
    await PersonModel.findByIdAndUpdate(info.id ,{ nickname, age, gender, desc, avatar })
    // 复制头像文件至 oa_server
    const sourceFile = path.resolve(__dirname, '..' + avatar);
    const destPath = path.resolve(__dirname, '../../oa_server' + avatar);
    console.log(sourceFile, destPath)
    const readStream = fs.createReadStream(sourceFile);
    const writeStream = fs.createWriteStream(destPath);
    readStream.pipe(writeStream);
  } else {
    await PersonModel.findByIdAndUpdate(info.id ,{ nickname, age, gender, desc })
  }

  res.send({
    code: 1,
    message: '个人信息修改成功'
  })
}

// 用户密码修改
const updatePwd = async (req, res) => {
  const { oldPwd, newPwd, rPwd } = req.body
  if (!oldPwd || !newPwd || !rPwd) return res.send({ code: 0, message: '参数不全' })
  if (newPwd !== rPwd) return res.send({ code: 0, message: '两次新密码不一致' })
  if (req.userInfo.password !== oldPwd) return res.send({ code: 0, message: '原始密码不正确' })
  // 校验通过后, 直接修改用户密码
  console.log('=====', newPwd, req.userInfo)
  await PersonModel.findByIdAndUpdate(req.userInfo._id, { password: newPwd })
  res.send({
    code: 1,
    message: '密码修改成功'
  })
}

// 获取用户信息
// const userInfo = async (req, res) => {
//   // 获取用户信息
//   console.log(req._id)
//   const userInfo = await PersonModel.findOne({ id: req.userId })
//   console.log(userInfo)
//   res.send({ code: 1, message: '获取用户信息成功', data: userInfo })
// }

module.exports = {
  register,
  login,
  // userInfo,
  update,
  updatePwd,
}
